home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / tos_updt / fmcity / palcom / auto / script / formcom.mx < prev    next >
Text File  |  1995-04-17  |  45KB  |  1,592 lines

  1. //--------------------------------------------------------------------------//
  2. //                        PALCOM V2.1 L10                        //
  3. //                     自動通信:フォーラム巡回スクリプト                    //
  4. //                                                                            //
  5. //                                        CopyRight(C) 1994/10/20                //
  6. //                                FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED    //
  7. //                                        written by C-cube Soft T.Nakamura    //
  8. //--------------------------------------------------------------------------//
  9. event    @OPEN.EXTERN    {
  10.     $$USER.DEFINED.9 = #TRUE;
  11.     $symList     = [];
  12.     $mesList     = [];
  13.     $dwnList     = [];
  14.     $bulDwnList  = [];
  15.     $noteDwnList = [];
  16.     $libDwnList  = [];
  17.     $mesDwnList  = [];
  18.     $mesList2    = [];
  19.     $symList2    = [];
  20.     $SetId       = #FALSE;
  21.     $ForumName   = "";
  22.     $AUTO.WAIT15 = AUTO.getWaitChar( 15 );
  23.     $AUTO.WAIT60 = AUTO.getWaitChar( 60 );
  24.     sys.global( $SetId     );
  25.     sys.global( $ForumName );
  26.     sys.global( $AUTO.WAIT15 );
  27.     sys.global( $AUTO.WAIT60 );
  28.  
  29.     //---   データの取得   ---//
  30.     $trdId       = AUTO.getTrdId();
  31.     $setDataList = AUTO.getSetData();
  32.     $topList     = list.getNth( $setDataList, 1 );
  33.     $formList    = list.getNth( $setDataList, 2 );
  34.     $dwFlg       = list.getNth( list.getNth( $topList, 3 ), 1 );
  35.     if( $dwFlg == #TRUE ) {
  36.         $dwnList = AUTO.getDownData();
  37.         $dwnList = AUTO.selectList( $dwnList, 5, 2 );
  38.     }
  39.     $mesUpFlg    = list.getNth( list.getNth( $topList, 3 ), 2 );
  40.     if( $mesUpFlg == #TRUE ) {
  41.         $mesList = AUTO.getUpList(  7 );
  42.     }
  43.     $symUpFlg    = list.getNth( list.getNth( $topList, 3 ), 3 );
  44.     if( $symUpFlg == #TRUE ) {
  45.         $symList = AUTO.getUpList( 12 );
  46.     }
  47.  
  48.     $i = 1;
  49.     foreach( $list, $formList ) {
  50.         //---   巡回する必要があるかどうかのチェック   ---//
  51.         $topList = list.get1st( list.getNth( $list, 2 ));
  52.         if( list.get1st( list.get1st( $topList )) == #FALSE ) {
  53.             $i = $i + 1;                        // とにかく巡回しない
  54.             continue;
  55.         }
  56.  
  57.         //---   対象のフォーラムのデータを抜き出す   ---//
  58.         $formNo = list.getLast( list.get1st( $list ));
  59.  
  60.         //---   処理内容のチェック   ---//
  61.         $st = 0;
  62.         if( $symUpFlg == #TRUE ) {
  63.             $symList2 = AUTO.selectUpList( $symList, 3, $formNo );
  64.             if( list.size( $symList2 ) != 0 ) {
  65.                 $st = $st | 0x01;                // SYSOP 宛メール有り
  66.             }
  67.         }
  68.         if( $mesUpFlg == #TRUE ) {
  69.             $mesList2 = AUTO.selectUpList( $mesList, 3, $formNo );
  70.             if( list.size( $mesList2 ) != 0 ) {
  71.                 $st = $st | 0x02;                // 会議室への書き込み
  72.             }
  73.         }
  74.         if( $dwFlg == #TRUE ) {
  75.             $dwnList2 = AUTO.selectList( $dwnList,  6, $formNo );
  76.             $ftopList = list.get1st( list.getNth( $list, 2 ));
  77.             $noteFlg  = list.getNth( list.getNth( $ftopList, 3 ), 1 );
  78.             $bulFlg   = list.getNth( list.getNth( $ftopList, 3 ), 2 );
  79.             if( list.get1st( list.getNth( $topList, 4 )) == #TRUE ) {
  80.                 $st = $st | 0x04;                // 会議室の巡回
  81.                 $mesDwnList = AUTO.selectList( $dwnList2, 7, 3 );
  82.                 if( list.size( $mesDwnList ) != 0 ) {
  83.                     $st = $st | 0x08;            // 会議室文書の指定ダウンロード
  84.                 }
  85.             }
  86.             if( list.getNth( list.getNth( $topList, 5 ),2 ) == #TRUE ) {
  87.                 $st = $st | 0x10;                // データライブラリの巡回
  88.             }
  89.             if( list.getNth( list.getNth( $topList, 5 ),1 ) == #TRUE ) {
  90.                 $libDwnList  = AUTO.selectList( $dwnList2, 7, 4 );
  91.                 if( list.size( $libDwnList ) != 0 ) {
  92.                     $st = $st | 0x20;            // データの指定ダウンロード
  93.                 }
  94.             }
  95.             if( $noteFlg == #TRUE ) {
  96.                 $st = $st | 0x40;                // お知らせの巡回
  97.                 $noteDwnList = AUTO.selectList( $dwnList2, 7, 1 );
  98.             }
  99.             if( $bulFlg == #TRUE ) {
  100.                 $st = $st | 0x80;                // 掲示板(BUL)の巡回
  101.                 $bulDwnList  = AUTO.selectList( $dwnList2, 7, 2 );
  102.             }
  103.         }
  104.  
  105.         //---   最終的に巡回する必要がある場合に巡回する   ---//
  106.         if( $st != 0 ) {
  107.             //---   フォーラムを巡回する   ---//
  108.             if( Auto.forumCom( $st, $list, $symList2, $mesList2, $mesDwnList,
  109.                             $libDwnList, $noteDwnList, $bulDwnList ) == -1 ) {
  110.                 AUTO.sendCommand("TT");
  111.             }
  112.             if( AUTO.getHaltFlg() != 0 ) {
  113.                 exit;
  114.             }
  115.         }
  116.         $i = $i + 1;
  117.         continue;
  118.     }
  119.     return;
  120. }
  121. event    @CLOSE.EXTERN {
  122.     sys.startIntRec();
  123.     return;
  124. }
  125. event    @ERROR {
  126.     sys.startIntRec();
  127.     AUTO.fatalError();
  128.     event.mainLoop();
  129. }
  130.  
  131.  
  132.  
  133. //------------------------------//
  134. //---   フォーラム内の巡回   ---//
  135. //------------------------------//
  136. function    Auto.forumCom(
  137.                 $status,
  138.                 $list,
  139.                 $symList,
  140.                 $mesUpList,
  141.                 $mesDwnList,
  142.                 $libDwnList,
  143.                 $noteDwnList,
  144.                 $bulDwnList )
  145. {
  146.     $tag     = list.get1st( $list );
  147.     $formNo  = list.getNth( $tag, 3 );
  148.     $topList = list.getNth( list.getNth( $list, 2 ), 1 );
  149.     $mesList = list.getNth( list.getNth( $list, 2 ), 2 );
  150.     $libList = list.getNth( list.getNth( $list, 2 ), 3 );
  151.     $chkData = list.getNth( list.getNth( $list, 2 ), 4 );
  152.  
  153.     //---   フォーラムに入る   ---//
  154.     if(( $ret =  Auto.forumIn( data.copy( $tag ), list.getNth( $topList, 2 ),
  155.                                                 $formNo, $chkData )) != 1 ) {
  156.         //---   フォーラムに入れなかった   ---//
  157.         return( $ret );
  158.     }
  159.  
  160.     //---   SYSOP宛メールの送信   ---//
  161.     if( $status & 0x01 ) {
  162.         xfer.pauseText( AUTO.getLogFileId());
  163.         foreach( $a, $symList ) {
  164.             $$USER.DEFINED.9 = [$a, 4];
  165.             $path = str.join([$$DIR.STANDARD,"AUTO\\SCRIPT\\SENDFILE.MX"],"" );
  166.             script.openExtern( $path, #FALSE, [] );
  167.             if( AUTO.getHaltFlg() != 0 ) {
  168.                 return( #FALSE );
  169.             }
  170.             if( $$USER.DEFINED.9 == #TRUE ) {
  171.                 AUTO.setSendFlg( $a );
  172.             }
  173.         }
  174.         xfer.resumeText( AUTO.getLogFileId());
  175.     }
  176.  
  177.     //---   お知らせを読む   ---//
  178.     if( $status & 0x40 ) {
  179.         Auto.noteCom( $formNo, $noteDwnList );
  180.     }
  181.  
  182.     //---   掲示板を読む   ---//
  183.     if( $status & 0x80 ) {
  184.         Auto.bulCom( $formNo, $bulDwnList );
  185.     }
  186.  
  187.     //---   会議室の巡回   ---//
  188.     if( $status & 0x0E ) {
  189.         $ret = Auto.mes( $ForumName, $status, data.copy( $tag ), $mesList,
  190.                                                     $mesUpList, $mesDwnList );
  191.         if( AUTO.getHaltFlg() != 0 ) {
  192.             return( #FALSE );
  193.         }
  194.         if( $ret == #FALSE ) {
  195.             return( #FALSE );
  196.         }
  197.     }
  198.  
  199.     //---   データライブラリの巡回   ---//
  200.     if( $status & 0x30 ) {
  201.         $ret = Auto.lib( $ForumName, $status, data.copy( $tag ),
  202.                                                     $libList, $libDwnList );
  203.         if( AUTO.getHaltFlg() != 0 ) {
  204.             return( #FALSE );
  205.         }
  206.         if( $ret == #FALSE ) {
  207.             return( #FALSE );
  208.         }
  209.     }
  210.     return( #TRUE );
  211. }
  212.  
  213. //----------------------------//
  214. //---   フォーラムに入る   ---//
  215. //----------------------------//
  216. function    Auto.forumIn(
  217.     $tag,                                        // フォーラムタグ
  218.     $tourokuList,                                // 会員登録情報
  219.     $formNo,                                    // フォーラム番号
  220.     $checkData )                                // フォーラムチェックデータ
  221. {
  222.     $logId = AUTO.getLogFileId();
  223.  
  224.     //---   データをデータベースから取り出す   ---//
  225.     list.putLast( $tag, -2 );
  226.     $ret = trd.getData( AUTO.getTrdId(), $tag );
  227.     if( list.get1st( $ret ) != -2 ) {            // データが無い
  228.         return( 0 );
  229.     }
  230.  
  231.     //---   データの編集   ---//
  232.     $ret       = str.split( list.getNth( $ret, 2 ), "\t" );
  233.     $ForumName = list.getNth( $ret, 2 );
  234.     $name      = str.smallToLarge( list.getNth( $ret, 1 ));
  235.  
  236.     //---   チェックデータのチェック   ---//
  237.     if( data.toNumber( list.getNth( $ret, 3 )) != $checkData ) {
  238.         return( 0 );
  239.     }
  240.  
  241.     //---   フォーラムに入る   ---//
  242.     $inFlg  = 0;
  243.     $newFlg = 0;
  244.     sys.stopIntRec();
  245.     $cmd = str.join(["GO ", $name, "\r"], "" );
  246.     loop {
  247.         AUTO.putStr( $cmd );
  248.         $errFlg  = 1;
  249.         comtable( $a, 300 ) {
  250.             $name    { $errFlg = 0; exit; }
  251.             interval{ AUTO.haltCheck();  }
  252.         }
  253.         if( $errFlg == 0 ) {
  254.             $ptr = file.tell( $logId );
  255.             exit;
  256.         }
  257.         AUTO.putStr("\r");
  258.         AUTO.waitPrompt( #TRUE );
  259.         continue;
  260.     }
  261.     $moreFlg = 0;
  262.     comtable( $a, 1200 ) {
  263.         interval            { AUTO.haltCheck();    }
  264.         $name                { $inFlg  = 1;        }    // 判定用文字列
  265.         "more"                { $moreFlg = 1;        }
  266.         "続き ("            { $moreFlg = 1;        }
  267.         $AUTO.WAIT60        { AUTO.putStr("\r");}
  268.         "1:フォーラム概要  2:一時利用  3:入会手続き" {
  269.              $newFlg = 1;                            // 会員登録しなくては
  270.         }
  271.         ">\w\w"                {                        // プロンプト
  272.             if( $moreFlg == 1 ) {
  273.                 AUTO.putStr("\r");
  274.                 $moreFlg = 0;
  275.             } else {
  276.                 exit;
  277.             }
  278.         }
  279.         ">\w\w"            {                        // プロンプト
  280.             if( $moreFlg == 1 ) {
  281.                 AUTO.putStr("\r");
  282.                 $moreFlg = 0;
  283.             } else {
  284.                 exit;
  285.             }
  286.         }
  287.         timeout                {                        // 何かおかしい
  288.             $errMsg =  ["通信異常(タイムアウト)",
  289.                         "フォーラムに入れませんでした。",
  290.                         str.join(["フォーラム名:", $ForumName], "" )];
  291.             AUTO.error("フォーラム巡回", $errMsg );
  292.             return( -1 );
  293.         }
  294.     }
  295.     if( $newFlg == 1 ) {
  296.         //---   会員登録していない   ---//
  297.         if( list.get1st( $tourokuList ) == #FALSE ) {
  298.             return( 0 );                            // 会員登録しない
  299.         }
  300.         AUTO.sendCommand("3");
  301.         AUTO.sendCommand( list.getNth( $tourokuList, 2 ));
  302.         AUTO.sendCommand("1");
  303.         AUTO.sendCommand("1");
  304.         $newFlg = 2;
  305.     }
  306.     if( $inFlg == 0 ) {
  307.         $errMsg =  ["フォーラムに入れませんでした。",
  308.                     str.join(["フォーラム名:", $ForumName], "" )];
  309.         AUTO.error("フォーラム巡回", $errMsg );
  310.         return( -1 );
  311.     }
  312.  
  313.     //---   フォーラムオープニングメッセージの記録   ---//
  314.     $ptr2 = file.tell( $logId );
  315.     AUTO.writeIdx([[0x501,[2,[1,2,$formNo,-1,-1,-1,-1,-1,-1,-1]]],
  316.                    [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  317.  
  318.     //---   初期設定コマンドの送信   ---//
  319.     AUTO.sendCommand("SET PAGE OFF");
  320.     AUTO.sendCommand("SET MENU OFF");
  321.     AUTO.sendCommand("SEND OFF");
  322.  
  323.     return( 1 );
  324. }
  325.  
  326.  
  327.  
  328. //--------------------------//
  329. //---   お知らせの巡回   ---//
  330. //--------------------------//
  331. function    Auto.noteCom( $formNo, $downList ) {
  332.     $logId = AUTO.getLogFileId();
  333.  
  334.     //---   お知らせに入って、タイトル一覧を取得   ---//
  335.     $inFlg  = #FALSE;
  336.     $ptr    = #FALSE;
  337.     $errFlg = 0;
  338.     AUTO.putStr2("ANN\r");
  339.     comtable( $a, 0 ) {
  340.         interval        { AUTO.haltCheck();    }
  341.         ">\w\w"        { exit; }
  342.         ">\w\w"            { exit; }
  343.         "題名\n"        {
  344.             $inFlg = #TRUE;
  345.             $ptr   = file.tell( $logId );
  346.         }
  347.         "\n"            {
  348.             if( $inFlg == #TRUE ) {
  349.                 $ptr2 = file.tell( $logId );
  350.             }
  351.         }
  352.         $AUTO.WAIT60 {
  353.             $errFlg = 1;
  354.             AUTO.putStr("\r");
  355.         }
  356.     }
  357.     if( $inFlg == #FALSE ) {
  358.         //---   お知らせに入れなかった   ---//
  359.         $errMsg =  ["フォーラムのお知らせに入れませんでした。",
  360.                     str.join(["フォーラム名      :", $ForumName],"" )];
  361.         AUTO.error("フォーラム巡回(お知らせ)", $errMsg );
  362.         return( #FALSE );
  363.     }
  364.     if(( $errFlg == 0 )&&( $ptr != #FALSE )) {
  365.         AUTO.writeIdx([[0x501,[4,[1,2,$formNo,1,-1,-1,-1,-1,-1,-1]]],
  366.                        [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  367.     } else {
  368.         $errMsg =  ["フォーラムのお知らせの文書一覧の取得に失敗しました。",
  369.                     str.join(["フォーラム名      :", $ForumName],"" )];
  370.         AUTO.error("フォーラム巡回(お知らせ)", $errMsg );
  371.     }
  372.  
  373.     //---   ダウンロードする文書がある場合表示させる   ---//
  374.     $i   = 1;
  375.     $num = list.size( $downList );
  376.     if( $num != 0 ) {
  377.         AUTO.sendCommand("SET MENU OFF");
  378.         loop {
  379.             if( $i > $num ) {
  380.                 exit;
  381.             }
  382.             $noList    = [];
  383.             $chkList   = [];
  384.             $downList2 = [];
  385.  
  386.             //---   15個ずつまとめて読む   ---//
  387.             loop {
  388.                 if( $i > $num ) {
  389.                     exit;
  390.                 }
  391.                 $list = list.getNth( $downList, $i );
  392.                 list.putLast( $noList, data.toString(list.getNth( $list, 8 )));
  393.                 list.putLast( $chkList, list.getNth( $list, 12 ));
  394.                 list.putLast( $downList2, $list );
  395.                 if( list.size( $noList ) == 15 ) {
  396.                     exit;
  397.                 }
  398.                 $i = $i + 1;
  399.             }
  400.             if( list.size( $noList ) != 0 ) {
  401.                 $cmd = str.join( $noList, "," );
  402.                 $cmd = str.join([$cmd, "\r"], "" );
  403.                 AUTO.putStr2( $cmd );
  404.                 $ptr  = file.tell( $logId );
  405.                 $ptr2 = $ptr;
  406.  
  407.                 $j      = 1;
  408.                 $flg    = 0;
  409.                 $errFlg = 0;
  410.                 comtable( $a, 0 ) {
  411.                     interval            { AUTO.haltCheck();    }
  412.                     $AUTO.WAIT60        { AUTO.putStr("\r"); }
  413.                     "◆番号又はコマンド"{
  414.                         AUTO.waitPrompt( #TRUE );
  415.                         $errMsg =  ["存在しない文書番号が存在します。",
  416.                                     "確認をしてください。",
  417.                                     str.join(["フォーラム名:",$ForumName],""),
  418.                                     str.join(["文書番号    :",$cmd     ],"")];
  419.                         AUTO.error("フォーラム巡回(お知らせ文書閲覧)",
  420.                                                                     $errMsg);
  421.                         exit;
  422.                     }
  423.                     ">\w\w"            {
  424.                         if( $errFlg == 0 ) {
  425.                             AUTO.writeIdx([
  426.                                 [0x501,[3,[1,2,$formNo,1,$no,-1,-1,-1,-1,-1]]],
  427.                                    [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  428.                             $list = list.getNth( $downList2, $j );
  429.                             list.del1st( $list );
  430.                             list.put1st( $list, 1 );
  431.                         }
  432.                         exit;
  433.                     }
  434.                     "next>\w\w"            {
  435.                         if( $errFlg == 0 ) {
  436.                             AUTO.writeIdx([
  437.                                 [0x501,[3,[1,2,$formNo,1,$no,-1,-1,-1,-1,-1]]],
  438.                                    [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  439.                             $list = list.getNth( $downList2, $j );
  440.                             list.del1st( $list );
  441.                             list.put1st( $list, 1 );
  442.                         }
  443.                         AUTO.putStr("\r");
  444.                         $flg    = 0;
  445.                         $errFlg = 0;
  446.                         $j = $j + 1;
  447.                     }
  448.                     "\n"    {
  449.                         if( $flg == 0  ) {
  450.                             $ptr  = file.tell( $logId );
  451.                             $ptr2 = $ptr;
  452.                         } else {
  453.                             $ptr2 = file.tell( $logId );
  454.                         }
  455.                     }
  456.                     "%2b%d   %2d/%2d/%2d    " {
  457.                         if( file.tell( $logId ) == $ptr2 + 18 ) {
  458.                             $no  = data.toNumber( str.left( $a, 3 ));
  459.                             $flg = 1;
  460.                             $str = str.replaceAll(
  461.                                     com.getString( 0, #TRUE, #TRUE ),"\n", "");
  462.                             $chkNum = str.addCode( $str );
  463. //test.print("CHECK:");
  464. //test.print( data.toString( $chkNum ));
  465. //test.print("/");
  466. //test.print( data.toString( list.getNth( $chkList, $j )));
  467.                             if( list.getNth( $chkList, $j ) != $chkNum ) {
  468.                                 $errFlg = 1;
  469.                                 $errMsg =[
  470.                                     "お知らせの文書番号が変更されています。",
  471.                                     "設定を再度行って下さい。",
  472.                                     str.join(["フォーラム名:",$ForumName],""),
  473.                                     str.join(["文書番号    :",
  474.                                                     data.toString( $no )],"")];
  475.                                 AUTO.error(
  476.                                         "フォーラム巡回(お知らせ文書閲覧)",
  477.                                                                     $errMsg );
  478.                             }
  479.                         }
  480.                     }
  481.                 }
  482.             }
  483.             if( $i <= $num ) {
  484.                 AUTO.sendCommand("M");
  485.             }
  486.         }
  487.     }
  488.     AUTO.updateDownData( $downList );
  489.     return;
  490. }
  491.  
  492. //-------------------------------//
  493. //---   掲示板 (BUL) の巡回   ---//
  494. //-------------------------------//
  495. function    Auto.bulCom( $formNo, $downList ) {
  496.     $logId = AUTO.getLogFileId();
  497.  
  498.     //---   掲示板に入る   ---//
  499.     $errFlg = 0;
  500.     AUTO.putStr2("BUL\r");
  501.     comtable( $a, 1200 ) {
  502.         "ご利用できません◆\n"    { $errFlg = 1; exit;    }
  503.         ">\w\w"                    { exit;                    }
  504.         ">\w\w"                { exit;                    }
  505.         $AUTO.WAIT60            { AUTO.putStr("\r");    }
  506.         timeout                    { $errFlg = 1; exit;    }
  507.         interval                { AUTO.haltCheck();        }
  508.     }
  509.     if( $errFlg == 1 ) {
  510.         $errMsg =  ["フォーラムの掲示板に入れませんでした。",
  511.                     str.join(["フォーラム名      :", $ForumName],"" )];
  512.         AUTO.error("フォーラム巡回(掲示板)", $errMsg );
  513.         return( #FALSE );
  514.     }
  515.  
  516.     //---   ダウンロードする文書がある場合表示させる   ---//
  517.     $i   = 1;
  518.     $num = list.size( $downList );
  519.     if( $num != 0 ) {
  520.         AUTO.sendCommand("SET MENU OFF");
  521.         loop {
  522.             if( $i > $num ) {
  523.                 exit;
  524.             }
  525.             $noList    = [];
  526.             $chkList   = [];
  527.             $downList2 = [];
  528.  
  529.             //---   15個ずつまとめて読む   ---//
  530.             loop {
  531.                 if( $i > $num ) {
  532.                     exit;
  533.                 }
  534.                 $list = list.getNth( $downList, $i );
  535.                 list.putLast( $noList, data.toString(list.getNth( $list, 8 )));
  536.                 list.putLast( $chkList, list.getNth( $list, 12 ));
  537.                 list.putLast( $downList2, $list );
  538.                 if( list.size( $noList ) == 15 ) {
  539.                     exit;
  540.                 }
  541.                 $i = $i + 1;
  542.             }
  543.             if( list.size( $noList ) != 0 ) {
  544.                 $cmd = str.join( $noList, "," );
  545.                 AUTO.putStr2( str.join(["READ ", $cmd, "\r"], "" ));
  546.                 $ptr  = file.tell( $logId );
  547.                 $ptr2 = $ptr;
  548.  
  549.                 $j      = 1;
  550.                 $flg    = 0;
  551.                 $errFlg = 0;
  552.                 comtable( $a, 0 ) {
  553.                     interval     { AUTO.haltCheck();  }
  554.                     $AUTO.WAIT60 { AUTO.putStr("\r"); }
  555.                     "◆番号又はコマンド"{
  556.                         AUTO.waitPrompt( #TRUE );
  557.                         $errMsg =  ["存在しない文書番号が存在します。",
  558.                                     "確認をしてください。",
  559.                                     str.join(["フォーラム名:",$ForumName],""),
  560.                                     str.join(["文書番号    :",$cmd     ],"")];
  561.                         AUTO.error("フォーラム巡回(掲示板文書閲覧)",$errMsg);
  562.                         exit;
  563.                     }
  564.                     ">\w\w"            {
  565.                         if( $errFlg == 0 ) {
  566.                             AUTO.writeIdx([
  567.                                 [0x501,[5,[1,2,$formNo,2,$no,-1,-1,-1,-1,-1]]],
  568.                                    [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  569.                             $list = list.getNth( $downList2, $j );
  570.                             list.del1st( $list );
  571.                             list.put1st( $list, 1 );
  572.                         }
  573.                         exit;
  574.                     }
  575.                     "next>\w\w"            {
  576.                         if( $errFlg == 0 ) {
  577.                             AUTO.writeIdx([
  578.                                 [0x501,[5,[1,2,$formNo,2,$no,-1,-1,-1,-1,-1]]],
  579.                                    [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  580.                             $list = list.getNth( $downList2, $j );
  581.                             list.del1st( $list );
  582.                             list.put1st( $list, 1 );
  583.                         }
  584.                         AUTO.putStr("\r");
  585.                         $flg    = 0;
  586.                         $errFlg = 0;
  587.                         $j = $j + 1;
  588.                     }
  589.                     "\n"    {
  590.                         if( $flg == 0  ) {
  591.                             $ptr  = file.tell( $logId );
  592.                             $ptr2 = $ptr;
  593.                         } else {
  594.                             $ptr2 = file.tell( $logId );
  595.                         }
  596.                     }
  597.                     "%2b%d   %3c%5d  %b%d/%2d%9b" {
  598.                         if( file.tell( $logId ) == $ptr2 + 30 ) {
  599.                             $no  = data.toNumber( str.left( $a, 3 ));
  600.                             $flg = 1;
  601.                             $str = str.replaceAll(
  602.                                     com.getString( 0, #TRUE, #TRUE ),"\n", "");
  603.                             $chkNum = str.addCode( $str );
  604. //test.print("CHECK:");
  605. //test.print( data.toString( $chkNum ));
  606. //test.print("/");
  607. //test.print( data.toString( list.getNth( $chkList, $j )));
  608.                             if( list.getNth( $chkList, $j ) != $chkNum ) {
  609.                                 $errFlg = 1;
  610.                                 $errMsg =[
  611.                                     "掲示板の文書番号が変更されています。",
  612.                                     "設定を再度行って下さい。",
  613.                                     str.join(["フォーラム名:",$ForumName],""),
  614.                                     str.join(["文書番号    :",
  615.                                                     data.toString( $no )],"")];
  616.                                 AUTO.error("フォーラム巡回(掲示板文書閲覧)",
  617.                                                                     $errMsg );
  618.                             }
  619.                         }
  620.                     }
  621.                 }
  622.             }
  623.             AUTO.sendCommand("M");
  624.         }
  625.     }
  626.     AUTO.updateDownData( $downList );
  627.  
  628.     //---   タイトル一覧を取得する   ---//
  629.     $errFlg = 0;
  630.     $ptr    = #FALSE;
  631.     AUTO.putStr2("READ\r");
  632.     comtable( $a, 0 ) {
  633.         interval        { AUTO.haltCheck();    }
  634.         ">\w\w"        { exit; }
  635.         ">\w\w"            { exit; }
  636.         "参照  題名\n" {
  637.             $ptr  = file.tell( $logId );
  638.         }
  639.         "\n"    {
  640.             $ptr2 = file.tell( $logId );
  641.         }
  642.         $AUTO.WAIT60 {
  643.             $errFlg = 1;
  644.             AUTO.putStr("\r");
  645.         }
  646.     }
  647.     if(( $errFlg == 0 )&&( $ptr != #FALSE )) {
  648.         AUTO.writeIdx([[0x501,[6,[1,2,$formNo,2,-1,-1,-1,-1,-1,-1]]],
  649.                        [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  650.     } else {
  651.         $errMsg =  ["フォーラムの掲示板の文書一覧の取得に失敗しました。",
  652.                     str.join(["フォーラム名      :", $ForumName],"" )];
  653.         AUTO.error("フォーラム巡回(掲示板)", $errMsg );
  654.     }
  655.     return;
  656. }
  657.  
  658.  
  659.  
  660. //----------------------------//
  661. //---   電子会議室の巡回   ---//
  662. //----------------------------//
  663. function    Auto.mes(
  664.     $ForumName,                                    // フォーラム名
  665.     $status,                                    // 動作ステータス
  666.     $tag,                                        // フォーラムのTRDのID
  667.     $list,                                        // 会議室情報リスト
  668.     $upList,                                    // アップロード情報リスト
  669.     $downList )                                    // ダウンロード情報リスト
  670. {
  671.     $dbChkList = [];
  672.     $chkList   = [];
  673.     $numList   = [];
  674.     $strList   = [];
  675.     $maxNo     = 0;
  676.     $formNo    = list.getNth( $tag, 3 );
  677.     sys.stopIntRec();
  678.  
  679.     //---   データベースファイルのデータを取り出す   ---//
  680.     $i      = 1;
  681.     $trdId  = AUTO.getTrdId();
  682.     $tagSub = data.copy( $tag );
  683.     list.putLast( $tagSub,  3 );
  684.     list.putLast( $tagSub, -6 );
  685.     loop {
  686.         $ret = trd.getData( $trdId, $tagSub );
  687.         if( list.get1st( $ret ) == 0 ) {
  688.             exit;
  689.         }
  690.         $wkList = str.split( list.getNth( $ret, 2 ), "\t" );
  691.         $no     = data.toNumber( list.get1st( $wkList ));
  692.         $str    = list.getNth( $wkList, 2 );
  693.         $str    = str.mid( $str, 28, str.length( $str ) - 28 );
  694.         $chkNum = str.addCode( $str );
  695.         loop {
  696.             if( $i == $no ) {
  697.                 exit;
  698.             }
  699.             list.putLast( $dbChkList, -1 );
  700.             $i = $i + 1;
  701.         }
  702.         list.putLast( $dbChkList, $chkNum );
  703.         $i = $i + 1;
  704.         $maxNo = $no;
  705.         $tagSub = [];
  706.     }
  707.  
  708.     //---   会議室の一覧を表示   ---//
  709.     $updateFlg = 0;
  710.     $mdsList   = [];
  711.     $titleList = [];
  712.     AUTO.putStr2("MES\r");
  713.     comtable( $a, 1200 ) {
  714.         interval        { AUTO.haltCheck();  }
  715.         $AUTO.WAIT60    { AUTO.putStr("\r"); }
  716.         ">\w\w"        { exit; }                // プロンプト
  717.         ">\w\w"            { exit; }
  718.         "%b%d   %5b (%4b)   %2d/%2d   " {        // 一覧の見出し
  719.             //---   見出し文字列と会議室名の保存   ---//
  720.             list.putLast( $mdsList, $a );
  721.             list.putLast( $titleList, 
  722.                     str.replaceAll( com.getString(0, #TRUE, #TRUE), "\n", ""));
  723.         }
  724.         timeout            {                        // 何か変・・・
  725.             $errMsg =  ["通信異常(タイムアウト)",
  726.                         "フォーラムの巡回を中止しました。",
  727.                         str.join(["フォーラム名:", $ForumName], "" )];
  728.             AUTO.error("フォーラム巡回(会議室)", $errMsg );
  729.             return( #FALSE );
  730.         }
  731.     }
  732.  
  733.     //---   会議室の構成が変更されていないかチェックしつつ   ---//
  734.     //---             チェックデータの作成及び未読数の取得   ---//
  735.     $i    = 1;
  736.     $enum = 1;
  737.     foreach( $a, $mdsList ) {
  738.         $no  = data.toNumber( $a );
  739.         $num = data.toNumber( str.mid( $a, 12, 4 ));
  740.         $str = list.getNth( $titleList, $enum );
  741.         $chkNum = str.addCode( $str );
  742.         loop {
  743.             if( $i == $no ) {
  744.                 exit;
  745.             }
  746.             list.putLast( $chkList, -1 );
  747.             list.putLast( $numList,  0 );
  748.             list.putLast( $strList, "" );
  749.             if( $maxNo < $i ) {
  750.                 $updateFlg = 1;
  751.                 $maxNo = $i;
  752.             } elif( list.getNth( $dbChkList, $i ) != -1 ) {
  753.                 $updateFlg = 1;
  754.             }
  755.             $i = $i + 1;
  756.         }
  757.         list.putLast( $chkList, $chkNum );
  758.         list.putLast( $numList, $num );
  759.         list.putLast( $strList, str.join( [$a, $str], "" ));
  760.  
  761.         //---   構成変更のチェック   ---//
  762.         if( $maxNo < $no ) {
  763.             $updateFlg = 1;
  764.             $maxNo = $no;
  765.         } elif( list.getNth( $dbChkList, $no ) != $chkNum ) {
  766.             $updateFlg = 1;
  767.         }
  768.         $i    = $i    + 1;
  769.         $enum = $enum + 1;
  770.     }
  771.     if( $maxNo != $no ) {
  772.         $updateFlg = 1;
  773.         $maxNo = $no;
  774.     }
  775.  
  776.     //---   巡回指定されている会議室に入る   ---//
  777.     if( list.get1st( list.get1st( $list )) == #TRUE ) {
  778.         $maxNum = list.getNth( list.get1st( $list ), 2 );
  779.     } else {
  780.         $maxNum = 99999;
  781.     }
  782.     $noList   = list.getNth( $list, 2 );
  783.     $chkList2 = list.getNth( $list, 3 );
  784.     $logId    = AUTO.getLogFileId();
  785.  
  786.     $i = 1;
  787.     $warning = 0;
  788.     foreach( $mesNo, $noList ) {
  789.         //---   会議室の構成のチェック   ---//
  790.         if( $mesNo > $maxNo ) {
  791.             //---   会議室が存在しない   ---//
  792.             if(( $updateFlg == 0 )&&( $warning == 0 )) {
  793.                 $errMsg =  ["会議室の構成が変更されています。",
  794.                             "設定を再度行って下さい。",
  795.                             str.join(["フォーラム名:", $ForumName], "" )];
  796.                 AUTO.error("フォーラム巡回(会議室)", $errMsg );
  797.                 $warning = 1;
  798.             }
  799.             $i = $i + 1;
  800.             continue;
  801.         }
  802.         if( list.getNth( $chkList, $mesNo ) != list.getNth( $chkList2, $i )) {
  803.             //---   会議室の構成が変わっている?   ---//
  804.             if(( $updateFlg == 0 )&&( $warning == 0 )) {
  805.                 $errMsg =  ["会議室の構成が変更されています。",
  806.                             "設定を再度行って下さい。",
  807.                             str.join(["フォーラム名:", $ForumName], "" )];
  808.                 AUTO.error("フォーラム巡回(会議室)", $errMsg );
  809.                 $warning = 1;
  810.             }
  811.             $i = $i + 1;
  812.             continue;
  813.         }
  814.  
  815.         //---   会議室に入る必要があるかどうか調べる   ---//
  816.         $downList2 = AUTO.selectList( $downList, 8, $mesNo );
  817.         $st = $status;
  818.         if( list.getNth( $numList, $mesNo ) == 0 ) {
  819.             $st = $st & 0xFB;                    // 未読無し
  820.         }
  821.         if( $st & 0x02 ) {
  822.             $upList2   = AUTO.selectUpList( $upList, 5, $mesNo );
  823.             if( list.size( $upList2 ) == 0 ) {
  824.                 $st = $st & 0xFD;                // アップロード文書無し
  825.             } else {
  826.                 //---   送信文書がある場合は強制的に   ---//
  827.                 //---   未読ダウンロードをONにする   ---//
  828.                 $num = list.getNth( $numList, $mesNo );
  829.                 $num = $num + list.size( $upList2 );
  830.                 list.delNth( $numList, $mesNo );
  831.                 list.putNth( $numList, $mesNo - 1, $num );
  832.                 $st = $st | 0x04;
  833.             }
  834.         }
  835.         if( $st & 0x08 ) {
  836.             if( list.size( $downList2 ) == 0 ) {
  837.                 $st = $st & 0xF7;                // 指定ダウンロード無し
  838.             }
  839.         }
  840.  
  841.         //---   会議室に入る必要無し   ---//
  842.         if(( $st & 0x0E ) == 0 ) {
  843.             $i = $i + 1;
  844.             continue;
  845.         }
  846.  
  847.         $mesName = list.getNth( $strList, $mesNo );
  848.  
  849.         //---   会議室に入る   ---//
  850.         $cmd = str.join(["MES ", data.toString( $mesNo )], "" );
  851.         loop {
  852.             AUTO.putStr( str.join([$cmd, "\r"], "" ));
  853.             $cmd = str.join([$cmd, "\n"], "" );
  854.             $errFlg  = 1;
  855.             comtable( $a, 300 ) {
  856.                 $cmd    { $errFlg = 0; exit; }
  857.                 interval{ AUTO.haltCheck();    }
  858.             }
  859.             if( $errFlg == 0 ) {
  860.                 exit;
  861.             }
  862.             AUTO.putStr("\r");
  863.             AUTO.waitPrompt( #TRUE );
  864.             continue;
  865.         }
  866.         $moreFlg = 0;
  867.         $inFlg   = 0;
  868.         comtable( $a, 1200 ) {
  869.             "CCS(%a)>\w\w"        { $inFlg = 1; exit;        }
  870.             ">\w\w"                { exit;                    }
  871.             ">\w\w"            { exit;                    }
  872.             $AUTO.WAIT60        { AUTO.putStr("\r");    }
  873.             interval            { AUTO.haltCheck();        }
  874.             timeout                { exit;                    }
  875.         }
  876.         if( $inFlg == 0 ) {
  877.             $errMsg =["会議室に入る事が出来ませんでした。",
  878.                        str.join(["フォーラム名:", $ForumName], "" ),
  879.                        str.join(["会議室名    :", $mesName],   "" )];
  880.             AUTO.error("フォーラム巡回(会議室)",$errMsg);
  881.             $i = $i + 1;
  882.             continue;
  883.         }
  884.  
  885.         //---   文書のアップロード   ---//
  886.         if( $st & 0x02 ) {
  887.             xfer.pauseText( $logId );
  888.             foreach( $a, $upList2 ) {
  889.                 $$USER.DEFINED.9 = [$a, 3];
  890.                 $path = str.join([$$DIR.STANDARD,
  891.                                   "AUTO\\SCRIPT\\SENDFILE.MX"], "" );
  892.                 script.openExtern( $path, #FALSE, [] );
  893.                 if( AUTO.getHaltFlg() != 0 ) {
  894.                     return( #FALSE );
  895.                 }
  896.                 if( $$USER.DEFINED.9 == #TRUE ) {
  897.                     AUTO.setSendFlg( $a );
  898.                 }
  899.                 xfer.resumeText( $logId );
  900.             }
  901.         }
  902.  
  903.         //---   指定ダウンロード   ---//
  904.         if( $st & 0x08 ) {
  905.             foreach( $a, $downList2 ) {
  906.                 if( list.getNth( $chkList, $mesNo ) != list.getNth( $a, 12 )) {
  907.                     //---   会議室の構成が変わった?   ---//
  908.                     continue;
  909.                 }
  910.  
  911.                 //---   メッセージを読む   ---//
  912.                 $no  = list.getNth( $a, 9 );
  913.                 $cmd = str.join(["#", data.toString( $no ),"\r"], "" );
  914.                 AUTO.putStr2( $cmd );
  915.                 $flg  = 0;
  916.                 $reNo = -1;
  917.                 $ptr1 = file.tell( $logId );
  918.                 comtable( $b, 0 ) {
  919.                     interval        { AUTO.haltCheck();  }
  920.                     $AUTO.WAIT60    { AUTO.putStr("\r"); }
  921.                     ">\w\w"        { exit; }
  922.                     ">\w\w"            { exit; }
  923.                     "%5d/%5d %8b  " {
  924.                         if( $flg == 0 ) {
  925.                             $flg      = 1;
  926.                             $ptr      = $ptr1;
  927.                             $title    = str.replaceAll(
  928.                                             com.getString( 0, #TRUE, #TRUE ),
  929.                                                                     "\n", "" );
  930.                         }
  931.                     }
  932.                     "%3d/%3d   %8b  " {
  933.                         if( $flg == 0 ) {
  934.                             $flg      = 1;
  935.                             $ptr      = $ptr1;
  936.                             $title    = str.replaceAll(
  937.                                             com.getString( 0, #TRUE, #TRUE ),
  938.                                                                     "\n", "" );
  939.                         }
  940.                     }
  941.                     "(%b%d)   %2d/%2d/%2d %2d:%2d  %3dへのコメント" {
  942.                         if( $reNo == -1 ) {
  943.                             $reNo = data.toNumber( str.mid( $b, 23, 3 ));
  944.                         }
  945.                     }
  946.                     "(%b%d)   %2d/%2d/%2d %2d:%2d  %5dへのコメント" {
  947.                         if( $reNo == -1 ) {
  948.                             $reNo = data.toNumber( str.mid( $b, 23, 5 ));
  949.                         }
  950.                     }
  951.                     "\n"            {
  952.                         $ptr2 = $ptr1;
  953.                         $ptr1 = file.tell( $logId );
  954.                     }
  955.                 }
  956.  
  957.                 if( $flg == 0 ) {
  958.                     $errMsg =  ["文書が存在しません。",
  959.                                 "文書のダウンロードを中止しました。",
  960.                                 str.join(["フォーラム名:", $ForumName], "" ),
  961.                                 str.join(["会議室名    :", $mesName  ], "" ),
  962.                                 str.join(["文書番号    :",
  963.                                                     data.toString($no)], "" )];
  964.                     AUTO.error("フォーラム巡回(会議室)", $errMsg );
  965.                     continue;
  966.                 }
  967.                 AUTO.writeIdx([
  968.                         [0x501,[7,[1,2,$formNo,3,$mesNo,$no,-1,-1,-1,-1]]],
  969.                         [0x104,[$title]],
  970.                         [0x401,[1,[$reNo,0,0,0,0]]],
  971.                         [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  972.                 list.del1st( $a );
  973.                 list.put1st( $a, 1 );
  974.                 AUTO.updateDownData( [$a] );
  975.             }
  976.         }
  977.  
  978.         //---   未読ダウンロード   ---//
  979.         if( $st & 0x04 ) {
  980.             if( list.getNth( $numList, $mesNo ) > $maxNum ) {
  981.                 //---   未読が指定上限数より多い場合、 ---//
  982.                 //---             タイトル一覧を表示   ---//
  983.                 $errFlg = 0;
  984.                 $ptr    = #FALSE;
  985.                 AUTO.putStr2("RTN\r");
  986.                 comtable( $a, 0 ) {
  987.                     interval        { AUTO.haltCheck();    }
  988.                     ">\w\w"        {
  989.                         AUTO.sendCommand("RC MAX");
  990.                         exit;
  991.                     }
  992.                     ">\w\w"        {
  993.                         AUTO.sendCommand("RC MAX");
  994.                         exit;
  995.                     }
  996.                     "題名\n"        {
  997.                         if( $ptr == #FALSE ) {
  998.                             $ptr = file.tell( $logId );
  999.                         }
  1000.                     }
  1001.                     "\n"            {
  1002.                         if( $ptr != #FALSE ) {
  1003.                             $ptr2 = file.tell( $logId );
  1004.                         }
  1005.                     }
  1006.                     $AUTO.WAIT60    {
  1007.                         $errFlg = 1;
  1008.                         AUTO.putStr("\r");
  1009.                     }
  1010.                 }
  1011.                 if(( $errFlg == 0 )&&( $ptr != #FALSE )) {
  1012.                     AUTO.writeIdx([
  1013.                         [0x501,[8,[1,2,$formNo,3,$mesNo,-1,-1,-1,-1,-1]]],
  1014.                         [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  1015.                 } else {
  1016.                     $errMsg =["会議室の未読タイトル一覧の取得に失敗しました。",
  1017.                                str.join(["フォーラム名:", $ForumName], "" ),
  1018.                                str.join(["会議室名    :", $mesName],   "" )];
  1019.                     AUTO.error("フォーラム巡回(会議室)",$errMsg);
  1020.                 }
  1021.             } else {
  1022.                 //---   未読を全て表示   ---//
  1023.                 $mode =  0;
  1024.                 $reNo = -1;
  1025.                 $ptr1 = file.tell( $logId );
  1026.                 $mesDataList = [];
  1027.                 AUTO.putStr2("MREAD\r");
  1028.                 comtable( $a, 0 ) {
  1029.                     interval     { AUTO.haltCheck();  }
  1030.                     $AUTO.WAIT60 { AUTO.putStr("\r"); }
  1031.                     "\n"    {
  1032.                         $ptr2 = $ptr1;
  1033.                         $ptr1 = file.tell( $logId );
  1034.                     }
  1035.                     "(%b%d)   %2d/%2d/%2d %2d:%2d  %3dへのコメント" {
  1036.                         if( $reNo == -1 ) {
  1037.                             $reNo = data.toNumber( str.mid( $a, 23, 3 ));
  1038.                         }
  1039.                     }
  1040.                     "(%b%d)   %2d/%2d/%2d %2d:%2d  %5dへのコメント" {
  1041.                         if( $reNo == -1 ) {
  1042.                             $reNo = data.toNumber( str.mid( $a, 23, 5 ));
  1043.                         }
  1044.                     }
  1045.                     "%3d/%3d   %8b  " {
  1046.                         if( file.tell( $logId ) == $ptr1 + 20 ) {
  1047.                             if( $mode == 1 ) {
  1048.                                 $tagList = [
  1049.                                     [0x501,[7,[1,2,$formNo,3,$mesNo,$no,
  1050.                                                                 -1,-1,-1,-1]]],
  1051.                                     [0x104,[$title]],
  1052.                                     [0x401,[1,[$reNo,0,0,0,0]]],
  1053.                                     [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]];
  1054.                                 if( $reNo == -1 ) {
  1055.                                     list.delNth( $tagList, 3 );
  1056.                                 }
  1057.                                 AUTO.writeIdx( $tagList );
  1058.                             }
  1059.                             $ptr      = $ptr1;
  1060.                             $title    = str.replaceAll(
  1061.                                             com.getString( 0, #TRUE, #TRUE ),
  1062.                                                                     "\n", "" );
  1063.                             $no   = data.toNumber( str.left( $a, 3 ));
  1064.                             $mode =  1;
  1065.                             $reNo = -1;
  1066.                         }
  1067.                     }
  1068.                     "%5d/%5d %8b  " {
  1069.                         if( file.tell( $logId ) == $ptr1 + 22 ) {
  1070.                             if( $mode == 1 ) {
  1071.                                 $tagList = [
  1072.                                     [0x501,[7,[1,2,$formNo,3,$mesNo,$no,
  1073.                                                                 -1,-1,-1,-1]]],
  1074.                                     [0x104,[$title]],
  1075.                                     [0x401,[1,[$reNo,0,0,0,0]]],
  1076.                                     [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]];
  1077.                                 if( $reNo == -1 ) {
  1078.                                     list.delNth( $tagList, 3 );
  1079.                                 }
  1080.                                 AUTO.writeIdx( $tagList );
  1081.                             }
  1082.                             $ptr      = $ptr1;
  1083.                             $title    = str.replaceAll(
  1084.                                             com.getString( 0, #TRUE, #TRUE ),
  1085.                                                                     "\n", "" );
  1086.                             $no   = data.toNumber( str.left( $a, 5 ));
  1087.                             $mode =  1;
  1088.                             $reNo = -1;
  1089.                         }
  1090.                     }
  1091.                     ">\w\w"            {
  1092.                         if( $mode == 1 ) {
  1093.                             $tagList = [
  1094.                             [0x501,[7,[1,2,$formNo,3,$mesNo,$no,-1,-1,-1,-1]]],
  1095.                             [0x104,[$title]],
  1096.                             [0x401,[1,[$reNo,0,0,0,0]]],
  1097.                             [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]];
  1098.                             if( $reNo == -1 ) {
  1099.                                 list.delNth( $tagList, 3 );
  1100.                             }
  1101.                             AUTO.writeIdx( $tagList );
  1102.                         }
  1103.                         exit;
  1104.                     }
  1105.                 }
  1106.             }
  1107.         }
  1108.         $i = $i + 1;
  1109.     }
  1110.  
  1111.     //---   データベースの更新を行う   ---//
  1112.     if( $updateFlg == 1 ) {
  1113.         Auto.updateDBfile( list.putLast( $tag, 3 ), $strList );
  1114.         AUTO.setTrdUpdateFlg();
  1115.         if( list.size( $dbChkList ) != 0 ) {
  1116.             $errMsg =  ["会議室の構成に変更がありました。",
  1117.                         "データベースファイルを更新しました。",
  1118.                         str.join(["フォーラム名:", $ForumName], "" )];
  1119.             AUTO.error("フォーラム巡回(会議室)", $errMsg );
  1120.         }
  1121.     }
  1122.     return( #TRUE );
  1123. }
  1124.  
  1125.  
  1126. //----------------------------------//
  1127. //---   データライブラリの巡回   ---//
  1128. //----------------------------------//
  1129. function    Auto.lib(
  1130.     $ForumName,                                    // フォーラム名
  1131.     $status,                                    // 動作ステータス
  1132.     $tag,                                        // フォーラムのTRDのID
  1133.     $list,                                        // データライブラリ情報リスト
  1134.     $downList )                                    // ダウンロード情報リスト
  1135. {
  1136.     $dbChkList = [];
  1137.     $chkList   = [];
  1138.     $strList   = [];
  1139.     $maxNo     = 0;
  1140.     $formNo    = list.getNth( $tag, 3 );
  1141.     sys.stopIntRec();
  1142.  
  1143.     //---   データベースファイルのデータを取り出す   ---//
  1144.     $i      = 1;
  1145.     $trdId  = AUTO.getTrdId();
  1146.     $tagSub = data.copy( $tag );
  1147.     list.putLast( $tagSub,  4 );
  1148.     list.putLast( $tagSub, -6 );
  1149.     loop {
  1150.         $ret = trd.getData( $trdId, $tagSub );
  1151.         if( list.get1st( $ret ) == 0 ) {
  1152.             exit;
  1153.         }
  1154.         $wkList = str.split( list.getNth( $ret, 2 ), "\t" );
  1155.         $no     = data.toNumber( list.get1st( $wkList ));
  1156.         $str    = list.getNth( $wkList, 2 );
  1157.         $str    = str.mid( $str, 28, str.length( $str ) - 28 );
  1158.         $chkNum = str.addCode( $str );
  1159.         loop {
  1160.             if( $i == $no ) {
  1161.                 exit;
  1162.             }
  1163.             list.putLast( $dbChkList, -1 );
  1164.             $i = $i + 1;
  1165.         }
  1166.         list.putLast( $dbChkList, $chkNum );
  1167.         $i = $i + 1;
  1168.         $maxNo = $no;
  1169.         $tagSub = [];
  1170.     }
  1171.  
  1172.     //---   データライブラリの一覧を表示   ---//
  1173.     $updateFlg = 0;
  1174.     $mdsList   = [];
  1175.     $titleList = [];
  1176.     AUTO.putStr2("LIB\r");
  1177.     comtable( $a, 1200 ) {
  1178.         interval        { AUTO.haltCheck();  }
  1179.         $AUTO.WAIT60    { AUTO.putStr("\r"); }
  1180.         ">\w\w"        { exit; }                // プロンプト
  1181.         ">\w\w"            { exit; }                // プロンプト
  1182.         timeout            {                        // 何か変・・・
  1183.             $errMsg =  ["通信異常(タイムアウト)",
  1184.                         "フォーラムの巡回を中止しました。",
  1185.                         str.join(["フォーラム名:", $ForumName], "" )];
  1186.             AUTO.error("フォーラム巡回", $errMsg );
  1187.             return( #FALSE );
  1188.         }
  1189.         "%3b%d %5b  (%4b)  %2d/%2d   " {        // 一覧の見出し
  1190.             //---   見出し文字列とデータライブラリ名の記録   ---//
  1191.             list.putLast( $mdsList, $a );
  1192.             list.putLast( $titleList, 
  1193.                     str.replaceAll( com.getString(0, #TRUE, #TRUE), "\n", ""));
  1194.         }
  1195.     }
  1196.  
  1197.     //---   データライブラリの構成に変更があったかどうかのチェック   ---//
  1198.     $i    = 1;
  1199.     $enum = 1;
  1200.     foreach( $a, $mdsList ) {
  1201.         //---   チェックデータの作成   ---//
  1202.         $no  = data.toNumber( $a );
  1203.         $str = list.getNth( $titleList, $enum );
  1204.         $chkNum = str.addCode( $str );
  1205.         loop {
  1206.             if( $i == $no ) {
  1207.                 exit;
  1208.             }
  1209.             list.putLast( $chkList, -1 );
  1210.             list.putLast( $strList, "" );
  1211.             if( $maxNo < $i ) {
  1212.                 $updateFlg = 1;
  1213.                 $maxNo = $i;
  1214.             } elif( list.getNth( $dbChkList, $i ) != -1 ) {
  1215.                 $updateFlg = 1;
  1216.             }
  1217.             $i = $i + 1;
  1218.         }
  1219.         list.putLast( $chkList, $chkNum );
  1220.         list.putLast( $strList, str.join( [$a, $str], "" ));
  1221.  
  1222.         //---   構成変更のチェック   ---//
  1223.         if( $maxNo < $no ) {
  1224.             $updateFlg = 1;
  1225.             $maxNo = $no;
  1226.         } elif( list.getNth( $dbChkList, $no ) != $chkNum ) {
  1227.             $updateFlg = 1;
  1228.         }
  1229.         $i    = $i    + 1;
  1230.         $enum = $enum + 1;
  1231.     }
  1232.     if( $maxNo != $no ) {
  1233.         $updateFlg = 1;
  1234.         $maxNo = $no;
  1235.     }
  1236.  
  1237.     //---   巡回指定されているデータライブラリに入る   ---//
  1238.     $dirList  = list.getNth( $list, 1 );
  1239.     $noList   = list.getNth( $list, 2 );
  1240.     $chkList2 = list.getNth( $list, 3 );
  1241.     $logId    = AUTO.getLogFileId();
  1242.  
  1243.     $i = 1;
  1244.     $warning = 0;
  1245.     foreach( $libNo, $noList ) {
  1246.         //---   データライブラリの構成のチェック   ---//
  1247.         if( $libNo > $maxNo ) {
  1248.             //---   データライブラリが存在しない   ---//
  1249.             if(( $updateFlg == 0 )&&( $warning == 0 )) {
  1250.                 $errMsg =  ["デ-タライブラリの構成が変更されています。",
  1251.                             "設定を再度行って下さい。",
  1252.                             str.join(["フォーラム名:", $ForumName], "" )];
  1253.                 AUTO.error("フォーラム巡回(データライブラリ)", $errMsg );
  1254.                 $warning = 1;
  1255.             }
  1256.             $i = $i + 1;
  1257.             continue;
  1258.         }
  1259.         if( list.getNth( $chkList, $libNo ) != list.getNth( $chkList2, $i )) {
  1260.             //---   データライブラリの構成が変わっている?   ---//
  1261.             if(( $updateFlg == 0 )&&( $warning == 0 )) {
  1262.                 $errMsg =  ["デ-タライブラリの構成が変更されています。",
  1263.                             "設定を再度行って下さい。",
  1264.                             str.join(["フォーラム名:", $ForumName], "" )];
  1265.                 AUTO.error("フォーラム巡回(データライブラリ)", $errMsg );
  1266.                 $warning = 1;
  1267.             }
  1268.             $i = $i + 1;
  1269.             continue;
  1270.         }
  1271.  
  1272.         //---   データライブラリに入る必要があるかどうか調べる   ---//
  1273.         $st = $status;
  1274.         if( $st & 0x20 ) {
  1275.             $downList2 = AUTO.selectList( $downList, 8, $libNo );
  1276.             if( list.size( $downList2 ) == 0 ) {
  1277.                 $st = $st & 0xDF;                // 指定ダウンロード無し
  1278.             }
  1279.         }
  1280.  
  1281.         //---   データライブラリに入る必要無し   ---//
  1282.         if(( $st & 0x30 ) == 0 ) {
  1283.             $i = $i + 1;
  1284.             continue;
  1285.         }
  1286.  
  1287.         $libName = list.getNth( $strList, $libNo );
  1288.  
  1289.         //---   データライブラリに入る   ---//
  1290.         $cmd = str.join(["LIB ", data.toString( $libNo )], "" );
  1291.         loop {
  1292.             AUTO.putStr( str.join([$cmd, "\r"], "" ));
  1293.             $cmd = str.join([$cmd, "\n"], "" );
  1294.             $errFlg  = 1;
  1295.             comtable( $a, 300 ) {
  1296.                 interval{ AUTO.haltCheck();  }
  1297.                 $cmd    { $errFlg = 0; exit; }
  1298.             }
  1299.             if( $errFlg == 0 ) {
  1300.                 exit;
  1301.             }
  1302.             AUTO.putStr("\r");
  1303.             AUTO.waitPrompt( #TRUE );
  1304.             continue;
  1305.         }
  1306.         $moreFlg = 0;
  1307.         $inFlg   = 0;
  1308.         comtable( $a, 1200 ) {
  1309.             "LIB>\w\w"            { $inFlg = 1; exit;        }
  1310.             ">\w\w"                { exit;                    }
  1311.             ">\w\w"            { exit;                    }
  1312.             $AUTO.WAIT60        { AUTO.putStr("\r");    }
  1313.             interval            { AUTO.haltCheck();        }
  1314.             timeout                { exit;                    }
  1315.         }
  1316.         if( $inFlg == 0 ) {
  1317.             $errMsg =["データライブラリに入る事が出来ませんでした。",
  1318.                         str.join(["フォーラム名      :", $ForumName ],"" ),
  1319.                         str.join(["データライブラリ名:", $libName   ],"" )];
  1320.             AUTO.error("フォーラム巡回(データライブラリ)",$errMsg);
  1321.             $i = $i + 1;
  1322.             continue;
  1323.         }
  1324.  
  1325.         //---   指定ダウンロード   ---//
  1326.         if( $st & 0x20 ) {
  1327.             $prot = "BPL";
  1328.             foreach( $a, $downList2 ) {
  1329.                 if( list.getNth( $chkList, $libNo ) != list.getNth( $a, 12 )) {
  1330.                     //---   データライブラリの構成が変わった?   ---//
  1331.                     continue;
  1332.                 }
  1333.  
  1334.                 //---   説明文の読み込み   ---//
  1335.                 $no  = list.getNth( $a, 9 );
  1336.                 $cmd = str.join(["DOWN ",data.toString($no)," PROT:",
  1337.                                                             $prot, "\r"], "" );
  1338.                 AUTO.putStr( $cmd );
  1339.                 $flg  = 0;
  1340.                 $mode = 0;
  1341.                 $bin  = 0;
  1342.                 comtable( $b, 0 ) {
  1343.                     interval        { AUTO.haltCheck();  }
  1344.                     $AUTO.WAIT60    { AUTO.putStr("\r"); }
  1345.                     ">\w\w"        { exit; }
  1346.                     ">\w\w"            { exit; }
  1347.                     "属性:バイナリ"{ $bin = 1; }
  1348.                     "データ名:"    {
  1349.                         $title = str.replaceAll( com.getString(0,#TRUE,#TRUE),
  1350.                                                                     "\n", "" );
  1351.                     }
  1352.                     "\n"            {
  1353.                         if( $mode == 2 ) {
  1354.                             $ptr3 = $ptr2;
  1355.                             $ptr2 = file.tell( $logId );
  1356.                         } elif( $mode == 1 ) {
  1357.                             $ptr2 = file.tell( $logId );
  1358.                             $mode = 2;
  1359.                         } else {
  1360.                             $ptr  = file.tell( $logId );
  1361.                             $mode = 1;
  1362.                         }
  1363.                     }
  1364.                     ":\w\w" {
  1365.                         $mesPtr  = $ptr;
  1366.                         $mesByte = $ptr3 - $ptr;
  1367.                         $flg = 1;
  1368.                         exit;
  1369.                     }
  1370.                     timeout {
  1371.                         $errMsg = ["通信異常(タイムアウト)",
  1372.                                 "フォーラムの巡回を中止しました。",
  1373.                                 str.join(["フォーラム名:", $ForumName], "" )];
  1374.                         AUTO.error("フォーラム巡回", $errMsg );
  1375.                         return( #FALSE );
  1376.                     }
  1377.                 }
  1378.  
  1379.                 if( $flg == 0 ) {
  1380.                     $errMsg =  ["データが存在しません。",
  1381.                                 "ダウンロードを中止しました。",
  1382.                                 str.join(["フォーラム名      :",
  1383.                                                     $ForumName        ],"" ),
  1384.                                 str.join(["データライブラリ名:",
  1385.                                                     $libName          ],"" ),
  1386.                                 str.join(["データ番号        :",
  1387.                                                     data.toString($no)],"" )];
  1388.                     AUTO.error("フォーラム巡回(データライブラリ)",$errMsg);
  1389.                     continue;
  1390.                 }
  1391.  
  1392.                 $fName = list.getNth( $a, 13 );
  1393.                 if( $fName == "" ) {            // ログに保存
  1394.                     $downMode = 0;
  1395.                     $fName = AUTO.getLogFileName();
  1396.                 } else {                        // 指定ファイルに保存
  1397.                     $downMode = 1;
  1398.                     //---   ファイルのフルパスを生成する   ---//
  1399.                     if( $bin == 0 ) {
  1400.                         $dir = $$DIR.TXT.DOWN;
  1401.                     } else {
  1402.                         $dir = $$DIR.BIN.DOWN;
  1403.                     }
  1404.                     $fName = file.toFullpath( $fName, $dir );
  1405.                     if( file.exist( $fName ) == #TRUE ) {
  1406.                         //---   既にファイルが存在する場合   ---//
  1407.                         //---         適当な名前に変更する   ---//
  1408.                         $tmp = $fName;
  1409.                         $fName = file.autoName( $dir, $bin );
  1410.                         $errMsg = ["同一のファイルが、既に存在します。",
  1411.                                 "ファイル名の変更を行いました。",
  1412.                                 str.join([$tmp, " → ", $fName], "" ),
  1413.                                 str.join(["フォーラム名      :",
  1414.                                                     $ForumName        ],"" ),
  1415.                                 str.join(["データライブラリ名:",
  1416.                                                     $libName          ],"" ),
  1417.                                 str.join(["データ番号        :",
  1418.                                                     data.toString($no)],"" )];
  1419.                         AUTO.error("フォーラム巡回(データライブラリ)",
  1420.                                                                     $errMsg );
  1421.                     }
  1422.                 }
  1423.  
  1424.                 AUTO.sendCommand("1");
  1425.                 $fNamePtr = file.tell( $logId );
  1426.                 $fNameByte = str.length( $fName );
  1427.                 AUTO.putStr2( str.join([$fName, "\r"], "" ));
  1428.                 comtable( $b, 600 ) {
  1429.                     interval   { AUTO.haltCheck(); }
  1430.                     "開始-\n" {
  1431.                         if( $downMode == 0 ) {    // ログに保存の場合
  1432.                             xfer.endText( $logId );
  1433.                             $dataPtr = file.tell( $logId );
  1434.                             file.close( $logId );
  1435.                         }
  1436.                         exit;
  1437.                     }
  1438.                     timeout    {
  1439.                         $errMsg = ["通信異常(タイムアウト)",
  1440.                                 "フォーラムの巡回を中止しました。",
  1441.                                 str.join(["フォーラム名:", $ForumName], "" )];
  1442.                         AUTO.error("フォーラム巡回", $errMsg );
  1443.                         return( #FALSE );
  1444.                     }
  1445.                 }
  1446.                 event.mask( @ERROR );
  1447.                 $IdxId = AUTO.getIdxFileId();
  1448.                 $idxHeader = lsi.getInfo( $IdxId );
  1449.                 list.del1st( $idxHeader );
  1450.                 list.put1st( $idxHeader, AUTO.getIdxNum());
  1451.                 lsi.setInfo( $IdxId, $idxHeader );
  1452.                 if( $downMode == 0 ) {            // ログに保存の場合
  1453.                     $ret = xfer.recBinary( $fName, "", #TRUE, [] );
  1454.                 } else {                        // ファイルに保存の場合
  1455.                     $ret = xfer.recBinary( $fName, "", #FALSE, [] );
  1456.                 }
  1457.                 event.unmask( @ERROR );
  1458.                 if( $downMode == 0 ) {
  1459.                     $logId = file.open( $fName, "", 1 );
  1460.                     file.seek( $logId, 0, 2 );
  1461.                     $dataByte = $ret;
  1462.                     xfer.recText( $logId, [] );
  1463.                     AUTO.setLogFileId( $logId );
  1464.                 }
  1465.                 if( data.getType( $ret ) != #NUMBER ) {
  1466.                     $errMsg =["ライブラリデータのダウンロードに失敗しました。",
  1467.                             str.join(["フォーラム名      :",
  1468.                                                     $ForumName        ],"" ),
  1469.                             str.join(["データライブラリ名:",
  1470.                                                     $libName          ],"" ),
  1471.                             str.join(["データ番号        :",
  1472.                                                     data.toString($no)],"" )];
  1473.                     AUTO.error("フォーラム巡回(データライブラリ)", $errMsg );
  1474.                 } else {
  1475.                     if( $downMode == 0 ) {        // ログに保存した場合
  1476.                         AUTO.writeIdx([
  1477.                            [0x501,[10,[1,2,$formNo,4,$libNo,$no,-1,-1,-1,-1]]],
  1478.                            [0x104,[$title]],
  1479.                            [0x302,[0x01,0x00,$mesPtr,$mesByte,0,0,0]],
  1480.                            [0x303,[0x01,0x8000,$dataPtr,$dataByte,0,0,0]]]);
  1481.                     } else {                    // 指定ファイルに保存した場合
  1482.                         if( $bin == 1 ) {
  1483.                             $type = 0x8000;
  1484.                         } else {
  1485.                             $type = 0x0000;
  1486.                         }
  1487.                         AUTO.writeIdx([
  1488.                            [0x501,[10,[1,2,$formNo,4,$libNo,$no,-1,-1,-1,-1]]],
  1489.                            [0x104,[$title]],
  1490.                            [0x302,[0x01,0x00,$mesPtr,$mesByte,0,0,0]],
  1491.                            [0x204,[$type,0x01,$fName]]] );
  1492.                     }
  1493.                     list.del1st( $a );
  1494.                     list.put1st( $a, 1 );
  1495.                     AUTO.updateDownData( [$a] );
  1496.                 }
  1497.                 AUTO.waitPrompt( #TRUE );
  1498.             }
  1499.         }
  1500.  
  1501.         //---   データ名一覧を表示   ---//
  1502.         if( $st & 0x10 ) {
  1503.             $mode   = 0;
  1504.             $errFlg = 0;
  1505.             if( list.get1st( $dirList ) == 2 ) {
  1506.                 //---   最新から指定数表示   ---//
  1507.                 $cmd = str.join(["SET LINE ",
  1508.                             data.toString( list.getNth( $dirList,2)+2)], "" );
  1509.                 AUTO.sendCommand( $cmd );
  1510.                 AUTO.sendCommand("SET PAGE ON");
  1511.             }
  1512.             AUTO.putStr2("DIR\r");
  1513.             comtable( $a, 0 ) {
  1514.                 interval        { AUTO.haltCheck();    }
  1515.                 "more>\w\w"        { exit;                }
  1516.                 ">\w\w"            { exit;                }
  1517.                 ">\w\w"        { exit;                }
  1518.                 "参照   データ名\n" {
  1519.                     $ptr = file.tell( $logId );
  1520.                     $mode = 1;
  1521.                 }
  1522.                 "\n"    {
  1523.                     $ptr2 = file.tell( $logId );
  1524.                 }
  1525.                 $AUTO.WAIT60    { 
  1526.                     $errFlg = 1;
  1527.                     AUTO.putStr("\r");
  1528.                 }
  1529.             }
  1530.             if( $errFlg == 1 ) {
  1531.                 $errMsg =["データライブラリのデータ一覧の取得に失敗しました。",
  1532.                             str.join(["フォーラム名      :", $ForumName],""),
  1533.                             str.join(["データライブラリ名:", $libName],  "")];
  1534.                 AUTO.error("フォーラム巡回(データライブラリ)", $errMsg );
  1535.             } else {
  1536.                 if( $mode == 1 ) {
  1537.                     AUTO.writeIdx([
  1538.                             [0x501,[11,[1,2,$formNo,4,$libNo,-1,-1,-1,-1,-1]]],
  1539.                             [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  1540.                 }
  1541.             }
  1542.             if( list.get1st( $dirList ) == 2 ) {
  1543.                 AUTO.sendCommand("E");
  1544.                 AUTO.sendCommand("SET PAGE OFF");
  1545.             }
  1546.         }
  1547.         $i = $i + 1;
  1548.     }
  1549.  
  1550.     //---   データベースの更新を行う   ---//
  1551.     if( $updateFlg == 1 ) {
  1552.         Auto.updateDBfile( list.putLast( $tag, 4 ), $strList );
  1553.         AUTO.setTrdUpdateFlg();
  1554.         if( list.size( $dbChkList ) != 0 ) {
  1555.             $errMsg  = ["データライブラリの構成に変更がありました。",
  1556.                         "データベースファイルを更新しました。",
  1557.                         str.join(["フォーラム名      :", $ForumName],"" )];
  1558.             AUTO.error("フォーラム巡回(データライブラリ)", $errMsg );
  1559.         }
  1560.     }
  1561.     return( #TRUE );
  1562. }
  1563.  
  1564.  
  1565.  
  1566. //------------------------------------------------//
  1567. //---   データベースファイルの内容を更新する   ---//
  1568. //---           (会議室/データライブラリ一覧)  ---//
  1569. //------------------------------------------------//
  1570. function    Auto.updateDBfile( $tag, $strList ) {
  1571.     $trdId = AUTO.getTrdId();
  1572.  
  1573.     //---   まずは現在のデータを全て削除する   ---//
  1574.     list.putLast( $tag, -6 );
  1575.     if( trd.count( $trdId, $tag ) != 0 ) {
  1576.         trd.delData( $trdId, $tag );
  1577.     }
  1578.  
  1579.     //---   データを書き込む   ---//
  1580.     foreach( $a, $strList ) {
  1581.         if( $a == "" ) {
  1582.             continue;
  1583.         }
  1584.         $no = data.toNumber( str.left( $a, 4 ));
  1585.         list.delLast( $tag );
  1586.         list.putLast( $tag, $no );
  1587.         trd.setData( $trdId, $tag, str.join([data.toString($no),$a], "\t" ));
  1588.     }
  1589.     AUTO.setTrdUpdateFlg();
  1590.     return;
  1591. }
  1592.